import { fileURLToPath, URL } from 'node:url';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import legacy from '@vitejs/plugin-legacy';
import autoprefixer from 'autoprefixer';
// import viteCompression from 'vite-plugin-compression';


// 引入自动导入插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
// 引入 Element Plus 解析器
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
    base: './', // 开发或生产环境服务的公共基础路径 配置引入相对路径
    plugins: [
        vue(),
        legacy({
            targets: ['chrome >= 31', 'ie >= 11', 'ios >= 11'], // 指定需要兼容的浏览器版本
            additionalLegacyPolyfills: ['regenerator-runtime/runtime'], // 可选：添加额外的 polyfill
            modernPolyfills: true,
            polyfills: [
                'es.symbol',
                'es.promise',
                'es.promise.finally',
                'es/map',
                'es/set',
                'es.array.filter',
                'es.array.for-each',
                'es.array.flat-map',
                'es.object.define-properties',
                'es.object.define-property',
                'es.object.get-own-property-descriptor',
                'es.object.get-own-property-descriptors',
                'es.object.keys',
                'es.object.to-string',
                'web.dom-collections.for-each',
                'esnext.global-this',
                'esnext.string.match-all'
            ]
        }),
        vueJsx(),
        AutoImport({
            resolvers: [ElementPlusResolver()],
        }),
        // 自动导入 Element Plus 组件
        Components({
            resolvers: [ElementPlusResolver()],
        }),
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('src', import.meta.url))
        }
    },
    server: {
        host: '127.0.0.1',
        port: 8081,
        open: true, // 服务启动时自动在浏览器中打开应用
        hmr: true,
        proxy: {
            '/api': {
                target: 'http://localhost:8091',
                changeOrigin: false, // 保持原始域名
                secure: false,
                ws: true,
                rewrite: (path) => path.replace(/^\/api/, ''),
                configure: (proxy, options) => {
                    proxy.on('proxyReq', (proxyReq, req, res) => {
                        // 确保Cookie被正确传递
                        console.log('Proxy request cookies:', req.headers.cookie);
                        if (req.headers.cookie) {
                            proxyReq.setHeader('Cookie', req.headers.cookie);
                        }
                        // 确保Host头正确
                        proxyReq.setHeader('Host', 'localhost:8091');
                    });
                    proxy.on('proxyRes', (proxyRes, req, res) => {
                        console.log('Proxy response set-cookie:', proxyRes.headers['set-cookie']);
                        // 确保响应的Set-Cookie能被浏览器接收
                        if (proxyRes.headers['set-cookie']) {
                            proxyRes.headers['set-cookie'] = proxyRes.headers['set-cookie'].map(cookie => {
                                // 移除Domain限制，让浏览器自动设置
                                return cookie.replace(/Domain=[^;]+;?\s*/i, '')
                                            .replace(/Secure;?\s*/i, '') // 移除Secure标志
                                            .replace(/SameSite=None/i, 'SameSite=Lax'); // 改为Lax
                            });
                        }
                    });
                }
            },
        }
    },
    // 使用 vite 安装 vue3 时，如果使用了 process.env，会遇到 process 未定义的情况，原因是 process.env 已经被移除了。解决办法是在 vite.config.ts 中增加 define：
    define: {
        'process.env': {}
    },
    // 打包配置
    build: {
        target: "es2015",
        outDir: "CRM_dev",
        minify: 'terser', // 默认是 'esbuild'，terser 压缩率更高（需安装 terser：npm i terser -D）
        terserOptions: { // 进一步配置 terser 压缩选项
            compress: {
                dead_code: true,
                drop_console: true, // 剔除 console 语句
                drop_debugger: true, // 剔除 debugger 语句
                unused: true,
                booleans:true,
                loops:true
            },
        },
        rollupOptions: {
            // 确保外部化处理那些你不想打包进库的依赖
            external: [],
            output: {
                // 静态资源分拆输出
                manualChunks(id) {
                    if (id.includes('node_modules')) {
                        return id.toString().split('node_modules/')[1].split('/')[0];
                    }
                }
            }
        },
        cssCodeSplit: true, // 拆分 CSS 为单独文件（避免重复打包）
        assetsInlineLimit: 4096, // 小于 4kb 的资源转为 base64 嵌入代码（减少请求，默认值）
        // CSS 配置
        css: {
            postcss: {
                plugins: [
                    autoprefixer({
                        overrideBrowserslist: ['chrome >= 31', 'ie >= 11', 'ios >= 11']
                    })
                ]
            }
        }
    }
});